60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f5069204e6574776f726b000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f506900000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000653565b508060049081620000a1919062000653565b505050620000c4620000b86200015f60201b60201c565b6200016760201b60201c565b620000f2620000d86200022d60201b60201c565b6c01431e0fae6d7217caa00000006200025760201b60201c565b600160066000620001086200022d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000855565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c0906200079b565b60405180910390fd5b620002dd60008383620003cf60201b60201c565b8060026000828254620002f19190620007ec565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003489190620007ec565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003af919062000838565b60405180910390a3620003cb60008383620003d460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045b57607f821691505b60208210810362000471576200047062000413565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049c565b620004e786836200049c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005346200052e6200052884620004ff565b62000509565b620004ff565b9050919050565b6000819050919050565b620005508362000513565b620005686200055f826200053b565b848454620004a9565b825550505050565b600090565b6200057f62000570565b6200058c81848462000545565b505050565b5b81811015620005b457620005a860008262000575565b60018101905062000592565b5050565b601f8211156200060357620005cd8162000477565b620005d8846200048c565b81016020851015620005e8578190505b62000600620005f7856200048c565b83018262000591565b50505b505050565b600082821c905092915050565b6000620006286000198460080262000608565b1980831691505092915050565b600062000643838362000615565b9150826002028217905092915050565b6200065e82620003d9565b67ffffffffffffffff8111156200067a5762000679620003e4565b5b62000686825462000442565b62000693828285620005b8565b600060209050601f831160018114620006cb5760008415620006b6578287015190505b620006c2858262000635565b86555062000732565b601f198416620006db8662000477565b60005b828110156200070557848901518255600182019150602085019450602081019050620006de565b8683101562000725578489015162000721601f89168262000615565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000783601f836200073a565b915062000790826200074b565b602082019050919050565b60006020820190508181036000830152620007b68162000774565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007f982620004ff565b91506200080683620004ff565b9250828201905080821115620008215762000820620007bd565b5b92915050565b6200083281620004ff565b82525050565b60006020820190506200084f600083018462000827565b92915050565b61222c80620008656000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb14610359578063b0fc29e614610389578063b6c05255146103a5578063dd62ed3e146103c1578063f2fde38b146103f15761012c565b806370a08231146102b3578063715018a6146102e35780638da5cb5b146102ed57806395d89b411461030b578063a457c2d7146103295761012c565b806339509351116100f457806339509351146101eb57806341d31d591461021b57806342966c681461024b5780634b0bddd2146102675780636b143bb8146102835761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b61013961040d565b6040516101469190611637565b60405180910390f35b610169600480360381019061016491906116f2565b61049f565b604051610176919061174d565b60405180910390f35b6101876104bd565b6040516101949190611777565b60405180910390f35b6101b760048036038101906101b29190611792565b6104c7565b6040516101c4919061174d565b60405180910390f35b6101d561055f565b6040516101e29190611801565b60405180910390f35b610205600480360381019061020091906116f2565b610568565b604051610212919061174d565b60405180910390f35b6102356004803603810190610230919061181c565b610614565b604051610242919061174d565b60405180910390f35b61026560048036038101906102609190611849565b610634565b005b610281600480360381019061027c91906118a2565b610641565b005b61029d6004803603810190610298919061181c565b610718565b6040516102aa9190611777565b60405180910390f35b6102cd60048036038101906102c8919061181c565b610730565b6040516102da9190611777565b60405180910390f35b6102eb610778565b005b6102f5610800565b60405161030291906118f1565b60405180910390f35b61031361082a565b6040516103209190611637565b60405180910390f35b610343600480360381019061033e91906116f2565b6108bc565b604051610350919061174d565b60405180910390f35b610373600480360381019061036e91906116f2565b6109a7565b604051610380919061174d565b60405180910390f35b6103a3600480360381019061039e91906116f2565b610a3d565b005b6103bf60048036038101906103ba91906116f2565b610b93565b005b6103db60048036038101906103d6919061190c565b610c1d565b6040516103e89190611777565b60405180910390f35b61040b6004803603810190610406919061181c565b610ca4565b005b60606003805461041c9061197b565b80601f01602080910402602001604051908101604052809291908181526020018280546104489061197b565b80156104955780601f1061046a57610100808354040283529160200191610495565b820191906000526020600020905b81548152906001019060200180831161047857829003601f168201915b5050505050905090565b60006104b36104ac610d9b565b8484610da3565b6001905092915050565b6000600254905090565b600042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561054b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610542906119f8565b60405180910390fd5b610556848484610f6c565b90509392505050565b60006012905090565b600061060a610575610d9b565b848460016000610583610d9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106059190611a47565b610da3565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b61063e3382611064565b50565b610649610d9b565b73ffffffffffffffffffffffffffffffffffffffff16610667610800565b73ffffffffffffffffffffffffffffffffffffffff16146106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b490611ac7565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60076020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610780610d9b565b73ffffffffffffffffffffffffffffffffffffffff1661079e610800565b73ffffffffffffffffffffffffffffffffffffffff16146107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90611ac7565b60405180910390fd5b6107fe600061123a565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108399061197b565b80601f01602080910402602001604051908101604052809291908181526020018280546108659061197b565b80156108b25780601f10610887576101008083540402835291602001916108b2565b820191906000526020600020905b81548152906001019060200180831161089557829003601f168201915b5050505050905090565b600080600160006108cb610d9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90611b59565b60405180910390fd5b61099c610993610d9b565b85858403610da3565b600191505092915050565b600042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a22906119f8565b60405180910390fd5b610a358383611300565b905092915050565b60011515600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790611bc5565b60405180910390fd5b428111610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990611c57565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fa0c059f2595befb36de71efd63f4f22962b07a9e0065db82688a2e963c0d71968282604051610b87929190611c77565b60405180910390a15050565b610b9b610d9b565b73ffffffffffffffffffffffffffffffffffffffff16610bb9610800565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690611ac7565b60405180910390fd5b610c198282611064565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610cac610d9b565b73ffffffffffffffffffffffffffffffffffffffff16610cca610800565b73ffffffffffffffffffffffffffffffffffffffff1614610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790611ac7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690611d12565b60405180910390fd5b610d988161123a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0990611da4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890611e36565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f5f9190611777565b60405180910390a3505050565b6000610f7984848461131e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc4610d9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90611ec8565b60405180910390fd5b61105885611050610d9b565b858403610da3565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90611f5a565b60405180910390fd5b6110df8260008361159d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90611fec565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546111bc919061200c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112219190611777565b60405180910390a3611235836000846115a2565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061131461130d610d9b565b848461131e565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361138d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611384906120b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390612144565b60405180910390fd5b61140783838361159d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906121d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115209190611a47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115849190611777565b60405180910390a36115978484846115a2565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115e15780820151818401526020810190506115c6565b60008484015250505050565b6000601f19601f8301169050919050565b6000611609826115a7565b61161381856115b2565b93506116238185602086016115c3565b61162c816115ed565b840191505092915050565b6000602082019050818103600083015261165181846115fe565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116898261165e565b9050919050565b6116998161167e565b81146116a457600080fd5b50565b6000813590506116b681611690565b92915050565b6000819050919050565b6116cf816116bc565b81146116da57600080fd5b50565b6000813590506116ec816116c6565b92915050565b6000806040838503121561170957611708611659565b5b6000611717858286016116a7565b9250506020611728858286016116dd565b9150509250929050565b60008115159050919050565b61174781611732565b82525050565b6000602082019050611762600083018461173e565b92915050565b611771816116bc565b82525050565b600060208201905061178c6000830184611768565b92915050565b6000806000606084860312156117ab576117aa611659565b5b60006117b9868287016116a7565b93505060206117ca868287016116a7565b92505060406117db868287016116dd565b9150509250925092565b600060ff82169050919050565b6117fb816117e5565b82525050565b600060208201905061181660008301846117f2565b92915050565b60006020828403121561183257611831611659565b5b6000611840848285016116a7565b91505092915050565b60006020828403121561185f5761185e611659565b5b600061186d848285016116dd565b91505092915050565b61187f81611732565b811461188a57600080fd5b50565b60008135905061189c81611876565b92915050565b600080604083850312156118b9576118b8611659565b5b60006118c7858286016116a7565b92505060206118d88582860161188d565b9150509250929050565b6118eb8161167e565b82525050565b600060208201905061190660008301846118e2565b92915050565b6000806040838503121561192357611922611659565b5b6000611931858286016116a7565b9250506020611942858286016116a7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061199357607f821691505b6020821081036119a6576119a561194c565b5b50919050565b7f45524332303a204c6f636b65642062616c616e63650000000000000000000000600082015250565b60006119e26015836115b2565b91506119ed826119ac565b602082019050919050565b60006020820190508181036000830152611a11816119d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a52826116bc565b9150611a5d836116bc565b9250828201905080821115611a7557611a74611a18565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ab16020836115b2565b9150611abc82611a7b565b602082019050919050565b60006020820190508181036000830152611ae081611aa4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611b436025836115b2565b9150611b4e82611ae7565b604082019050919050565b60006020820190508181036000830152611b7281611b36565b9050919050565b7f61646d696e3a207775743f000000000000000000000000000000000000000000600082015250565b6000611baf600b836115b2565b9150611bba82611b79565b602082019050919050565b60006020820190508181036000830152611bde81611ba2565b9050919050565b7f4552433230203a2043757272656e742074696d6520697320677265617465722060008201527f7468616e2072656c656173652074696d65000000000000000000000000000000602082015250565b6000611c416031836115b2565b9150611c4c82611be5565b604082019050919050565b60006020820190508181036000830152611c7081611c34565b9050919050565b6000604082019050611c8c60008301856118e2565b611c996020830184611768565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611cfc6026836115b2565b9150611d0782611ca0565b604082019050919050565b60006020820190508181036000830152611d2b81611cef565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611d8e6024836115b2565b9150611d9982611d32565b604082019050919050565b60006020820190508181036000830152611dbd81611d81565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e206022836115b2565b9150611e2b82611dc4565b604082019050919050565b60006020820190508181036000830152611e4f81611e13565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611eb26028836115b2565b9150611ebd82611e56565b604082019050919050565b60006020820190508181036000830152611ee181611ea5565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f446021836115b2565b9150611f4f82611ee8565b604082019050919050565b60006020820190508181036000830152611f7381611f37565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fd66022836115b2565b9150611fe182611f7a565b604082019050919050565b6000602082019050818103600083015261200581611fc9565b9050919050565b6000612017826116bc565b9150612022836116bc565b925082820390508181111561203a57612039611a18565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061209c6025836115b2565b91506120a782612040565b604082019050919050565b600060208201905081810360008301526120cb8161208f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061212e6023836115b2565b9150612139826120d2565b604082019050919050565b6000602082019050818103600083015261215d81612121565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121c06026836115b2565b91506121cb82612164565b604082019050919050565b600060208201905081810360008301526121ef816121b3565b905091905056fea264697066735822122078ce3de0cb38e23b2591153bea16d7d01771453dc2e25f5b2281b067b6abaedf64736f6c63430008110033