60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f506174726f6e20436f696e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f504154524f4e000000000000000000000000000000000000000000000000000081525081600390816200008f91906200065f565b508060049081620000a191906200065f565b505050620000e533620000b96200010060201b60201c565b600a620000c79190620008d6565b641010b87200620000d9919062000927565b6200010960201b60201c565b620000fa6000801b336200027660201b60201c565b62000a5e565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200017b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017290620009d3565b60405180910390fd5b6200018f600083836200036860201b60201c565b8060026000828254620001a39190620009f5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000256919062000a41565b60405180910390a362000272600083836200036d60201b60201c565b5050565b6200028882826200037260201b60201c565b620003645760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000309620003dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200046757607f821691505b6020821081036200047d576200047c6200041f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004e77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004a8565b620004f38683620004a8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005406200053a62000534846200050b565b62000515565b6200050b565b9050919050565b6000819050919050565b6200055c836200051f565b620005746200056b8262000547565b848454620004b5565b825550505050565b600090565b6200058b6200057c565b6200059881848462000551565b505050565b5b81811015620005c057620005b460008262000581565b6001810190506200059e565b5050565b601f8211156200060f57620005d98162000483565b620005e48462000498565b81016020851015620005f4578190505b6200060c620006038562000498565b8301826200059d565b50505b505050565b600082821c905092915050565b6000620006346000198460080262000614565b1980831691505092915050565b60006200064f838362000621565b9150826002028217905092915050565b6200066a82620003e5565b67ffffffffffffffff811115620006865762000685620003f0565b5b6200069282546200044e565b6200069f828285620005c4565b600060209050601f831160018114620006d75760008415620006c2578287015190505b620006ce858262000641565b8655506200073e565b601f198416620006e78662000483565b60005b828110156200071157848901518255600182019150602085019450602081019050620006ea565b868310156200073157848901516200072d601f89168262000621565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007d457808604811115620007ac57620007ab62000746565b5b6001851615620007bc5780820291505b8081029050620007cc8562000775565b94506200078c565b94509492505050565b600082620007ef5760019050620008c2565b81620007ff5760009050620008c2565b8160018114620008185760028114620008235762000859565b6001915050620008c2565b60ff84111562000838576200083762000746565b5b8360020a91508482111562000852576200085162000746565b5b50620008c2565b5060208310610133831016604e8410600b8410161715620008935782820a9050838111156200088d576200088c62000746565b5b620008c2565b620008a2848484600162000782565b92509050818404811115620008bc57620008bb62000746565b5b81810290505b9392505050565b600060ff82169050919050565b6000620008e3826200050b565b9150620008f083620008c9565b92506200091f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007dd565b905092915050565b600062000934826200050b565b915062000941836200050b565b925082820262000951816200050b565b915082820484148315176200096b576200096a62000746565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620009bb601f8362000972565b9150620009c88262000983565b602082019050919050565b60006020820190508181036000830152620009ee81620009ac565b9050919050565b600062000a02826200050b565b915062000a0f836200050b565b925082820190508082111562000a2a5762000a2962000746565b5b92915050565b62000a3b816200050b565b82525050565b600060208201905062000a58600083018462000a30565b92915050565b6122658062000a6e6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806342966c68116100ad578063a217fddf11610071578063a217fddf14610369578063a457c2d714610387578063a9059cbb146103b7578063d547741f146103e7578063dd62ed3e146104035761012c565b806342966c68146102b357806370a08231146102cf57806379cc6790146102ff57806391d148541461031b57806395d89b411461034b5761012c565b8063248a9ca3116100f4578063248a9ca3146101fd5780632f2ff15d1461022d578063313ce5671461024957806336568abe1461026757806339509351146102835761012c565b806301ffc9a71461013157806306fdde0314610161578063095ea7b31461017f57806318160ddd146101af57806323b872dd146101cd575b600080fd5b61014b60048036038101906101469190611597565b610433565b60405161015891906115df565b60405180910390f35b6101696104ad565b604051610176919061168a565b60405180910390f35b61019960048036038101906101949190611740565b61053f565b6040516101a691906115df565b60405180910390f35b6101b7610562565b6040516101c4919061178f565b60405180910390f35b6101e760048036038101906101e291906117aa565b61056c565b6040516101f491906115df565b60405180910390f35b61021760048036038101906102129190611833565b61059b565b604051610224919061186f565b60405180910390f35b6102476004803603810190610242919061188a565b6105bb565b005b6102516105dc565b60405161025e91906118e6565b60405180910390f35b610281600480360381019061027c919061188a565b6105e5565b005b61029d60048036038101906102989190611740565b610668565b6040516102aa91906115df565b60405180910390f35b6102cd60048036038101906102c89190611901565b61069f565b005b6102e960048036038101906102e4919061192e565b6106b3565b6040516102f6919061178f565b60405180910390f35b61031960048036038101906103149190611740565b6106fb565b005b6103356004803603810190610330919061188a565b61071b565b60405161034291906115df565b60405180910390f35b610353610786565b604051610360919061168a565b60405180910390f35b610371610818565b60405161037e919061186f565b60405180910390f35b6103a1600480360381019061039c9190611740565b61081f565b6040516103ae91906115df565b60405180910390f35b6103d160048036038101906103cc9190611740565b610896565b6040516103de91906115df565b60405180910390f35b61040160048036038101906103fc919061188a565b6108b9565b005b61041d6004803603810190610418919061195b565b6108da565b60405161042a919061178f565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a657506104a582610961565b5b9050919050565b6060600380546104bc906119ca565b80601f01602080910402602001604051908101604052809291908181526020018280546104e8906119ca565b80156105355780601f1061050a57610100808354040283529160200191610535565b820191906000526020600020905b81548152906001019060200180831161051857829003601f168201915b5050505050905090565b60008061054a6109cb565b90506105578185856109d3565b600191505092915050565b6000600254905090565b6000806105776109cb565b9050610584858285610b9c565b61058f858585610c28565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6105c48261059b565b6105cd81610e9e565b6105d78383610eb2565b505050565b60006012905090565b6105ed6109cb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190611a6d565b60405180910390fd5b6106648282610f93565b5050565b6000806106736109cb565b905061069481858561068585896108da565b61068f9190611abc565b6109d3565b600191505092915050565b6106b06106aa6109cb565b82611075565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61070d826107076109cb565b83610b9c565b6107178282611075565b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610795906119ca565b80601f01602080910402602001604051908101604052809291908181526020018280546107c1906119ca565b801561080e5780601f106107e35761010080835404028352916020019161080e565b820191906000526020600020905b8154815290600101906020018083116107f157829003601f168201915b5050505050905090565b6000801b81565b60008061082a6109cb565b9050600061083882866108da565b90508381101561087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490611b62565b60405180910390fd5b61088a82868684036109d3565b60019250505092915050565b6000806108a16109cb565b90506108ae818585610c28565b600191505092915050565b6108c28261059b565b6108cb81610e9e565b6108d58383610f93565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990611bf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890611c86565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b8f919061178f565b60405180910390a3505050565b6000610ba884846108da565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c225781811015610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90611cf2565b60405180910390fd5b610c2184848484036109d3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90611d84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90611e16565b60405180910390fd5b610d11838383611242565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90611ea8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e85919061178f565b60405180910390a3610e98848484611247565b50505050565b610eaf81610eaa6109cb565b61124c565b50565b610ebc828261071b565b610f8f5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f346109cb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610f9d828261071b565b156110715760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506110166109cb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90611f3a565b60405180910390fd5b6110f082600083611242565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90611fcc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611229919061178f565b60405180910390a361123d83600084611247565b505050565b505050565b505050565b611256828261071b565b6112cd57611263816112d1565b6112718360001c60206112fe565b6040516020016112829291906120c0565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4919061168a565b60405180910390fd5b5050565b60606112f78273ffffffffffffffffffffffffffffffffffffffff16601460ff166112fe565b9050919050565b60606000600283600261131191906120fa565b61131b9190611abc565b67ffffffffffffffff8111156113345761133361213c565b5b6040519080825280601f01601f1916602001820160405280156113665781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061139e5761139d61216b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106114025761140161216b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261144291906120fa565b61144c9190611abc565b90505b60018111156114ec577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061148e5761148d61216b565b5b1a60f81b8282815181106114a5576114a461216b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806114e59061219a565b905061144f565b5060008414611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061220f565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6115748161153f565b811461157f57600080fd5b50565b6000813590506115918161156b565b92915050565b6000602082840312156115ad576115ac61153a565b5b60006115bb84828501611582565b91505092915050565b60008115159050919050565b6115d9816115c4565b82525050565b60006020820190506115f460008301846115d0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611634578082015181840152602081019050611619565b60008484015250505050565b6000601f19601f8301169050919050565b600061165c826115fa565b6116668185611605565b9350611676818560208601611616565b61167f81611640565b840191505092915050565b600060208201905081810360008301526116a48184611651565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116d7826116ac565b9050919050565b6116e7816116cc565b81146116f257600080fd5b50565b600081359050611704816116de565b92915050565b6000819050919050565b61171d8161170a565b811461172857600080fd5b50565b60008135905061173a81611714565b92915050565b600080604083850312156117575761175661153a565b5b6000611765858286016116f5565b92505060206117768582860161172b565b9150509250929050565b6117898161170a565b82525050565b60006020820190506117a46000830184611780565b92915050565b6000806000606084860312156117c3576117c261153a565b5b60006117d1868287016116f5565b93505060206117e2868287016116f5565b92505060406117f38682870161172b565b9150509250925092565b6000819050919050565b611810816117fd565b811461181b57600080fd5b50565b60008135905061182d81611807565b92915050565b6000602082840312156118495761184861153a565b5b60006118578482850161181e565b91505092915050565b611869816117fd565b82525050565b60006020820190506118846000830184611860565b92915050565b600080604083850312156118a1576118a061153a565b5b60006118af8582860161181e565b92505060206118c0858286016116f5565b9150509250929050565b600060ff82169050919050565b6118e0816118ca565b82525050565b60006020820190506118fb60008301846118d7565b92915050565b6000602082840312156119175761191661153a565b5b60006119258482850161172b565b91505092915050565b6000602082840312156119445761194361153a565b5b6000611952848285016116f5565b91505092915050565b600080604083850312156119725761197161153a565b5b6000611980858286016116f5565b9250506020611991858286016116f5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806119e257607f821691505b6020821081036119f5576119f461199b565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611a57602f83611605565b9150611a62826119fb565b604082019050919050565b60006020820190508181036000830152611a8681611a4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ac78261170a565b9150611ad28361170a565b9250828201905080821115611aea57611ae9611a8d565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611b4c602583611605565b9150611b5782611af0565b604082019050919050565b60006020820190508181036000830152611b7b81611b3f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611bde602483611605565b9150611be982611b82565b604082019050919050565b60006020820190508181036000830152611c0d81611bd1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c70602283611605565b9150611c7b82611c14565b604082019050919050565b60006020820190508181036000830152611c9f81611c63565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611cdc601d83611605565b9150611ce782611ca6565b602082019050919050565b60006020820190508181036000830152611d0b81611ccf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d6e602583611605565b9150611d7982611d12565b604082019050919050565b60006020820190508181036000830152611d9d81611d61565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611e00602383611605565b9150611e0b82611da4565b604082019050919050565b60006020820190508181036000830152611e2f81611df3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e92602683611605565b9150611e9d82611e36565b604082019050919050565b60006020820190508181036000830152611ec181611e85565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f24602183611605565b9150611f2f82611ec8565b604082019050919050565b60006020820190508181036000830152611f5381611f17565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb6602283611605565b9150611fc182611f5a565b604082019050919050565b60006020820190508181036000830152611fe581611fa9565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600061202d601783611fec565b915061203882611ff7565b601782019050919050565b600061204e826115fa565b6120588185611fec565b9350612068818560208601611616565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006120aa601183611fec565b91506120b582612074565b601182019050919050565b60006120cb82612020565b91506120d78285612043565b91506120e28261209d565b91506120ee8284612043565b91508190509392505050565b60006121058261170a565b91506121108361170a565b925082820261211e8161170a565b9150828204841483151761213557612134611a8d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006121a58261170a565b9150600082036121b8576121b7611a8d565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006121f9602083611605565b9150612204826121c3565b602082019050919050565b60006020820190508181036000830152612228816121ec565b905091905056fea2646970667358221220a1370c6608fe813e61aef69372ddc8cf1ebf37ae01393cf13498e58e41ab43ba64736f6c63430008120033